ความ ปัญหาความเร็ว ระบุว่าเคอร์เนลที่สมบูรณ์แบบทางคณิตศาสตร์ เช่น $out = x + y$ อาจมีประสิทธิภาพแย่กว่าการวนซ้ำบนโปรเซสเซอร์ (CPU) หากไม่สามารถกระจายต้นทุนคงที่ของฮาร์ดแวร์กราฟิกได้อย่างเหมาะสม ซึ่งมักปรากฏในรูปแบบของ ภาษีการเปิดใช้งาน.
1. ข้อผิดพลาดเรื่อง "ความถูกต้อง"
ความถูกต้องตามหน้าที่ไม่ได้หมายความถึงประสิทธิภาพ แม้ว่าโค้ดทริตอนของคุณจะแจกจ่ายงานอย่างถูกต้องไปยังหลายพันเธรด แต่หากปริมาณงานทั้งหมด (N) มีขนาดเล็ก ก็จะทำให้หน่วยประมวลผลกราฟิก (GPU) ไม่ได้ใช้งานเต็มที่ ฮาร์ดแวร์จะใช้เวลานานในการเปลี่ยนสถานะมากกว่าการคำนวณจริง
2. กลเม็ดการวัดผลจากภาษาไพธอน
การทดสอบประสิทธิภาพโค้ดกราฟิกจากภาษาไพธอนโดยใช้ time.time() เป็นอันตราย เพราะการเรียกใช้กราฟิก (GPU) เป็น แบบไม่สัมพันธ์เวลา; ไพธอนเพียงแค่ ใส่ลงในคิว คำสั่งแล้วดำเนินการต่อไป ถ้าไม่มี torch.cuda.synchronize()คุณจะวัดเวลาที่รอคิว แต่หากมีการซิงโครไนซ์ คุณจะวัด เวลาหน่วงระหว่างโฮสต์กับอุปกรณ์ซึ่งมักยาวกว่าการประมวลผลเคอร์เนลเองถึง 10 เท่า
3. เวลาหน่วงเทียบกับอัตราการไหล
เพื่อแก้ไขปัญหานี้ คุณต้องมีงานเพียงพอเพื่อ 'ซ่อน' เวลาหน่วงการเปิดใช้งาน นี่คือการเปลี่ยนแปลงจากโหมดที่จำกัดด้วย จำกัดด้วยเวลาหน่วง โหมด (จำกัดด้วยแบนด์วิดธ์ระหว่างโปรเซสเซอร์และกราฟิก) สู่โหมดที่จำกัดด้วย จำกัดด้วยอัตราการไหล โหมด (จำกัดด้วยหน่วยความจำหรือการประมวลผลของกราฟิก)